package day02;
//类型转换的演示
public class DdtaTypecastDemo {
    public static void main(String[] args) {
        //两种方式: 自动类型转换、强制类型转换

        //自动类型转换:
        int a = 5;//自动类型转换
        long b = a;//自动类型转换
        //int c = b;//编译报错, 类型不一致
        int c = (int)b;
        long d = 5;//自动类型转换
        double e = d;//自动类型转换
        System.out.println(e);//5.0, 默认保留一位小数

        //强制转换类型
        long f = 10000000000L;
        int g = (int) f;
        System.out.println(g);// , 强转有可能发生溢出
        double h = 25.987;
        int i = (int) h;
        System.out.println(i); //25 ,强转丢失精度

        /*
        练习:
            //两种方式: 自动类型转换、强制类型转换
            int a = 5;//自动类型转换
            long b = a; //自动类型转换
            int c = (int)b;//强制类型转换
            long d = 5;//自动类型转换 5默认为int
            double e = 5; 自动类型转换 5默认为int
            System.out.println(e); //5.0, 默认保留一位小数
            long f = 10000000000L;//100亿默认为int类型, 需要加L
            int g = (int)f;
            System.out.println(g);//1410065408,强转有可能发生溢出
            double h = 25.987;
            int i = (int)h;
            System.out.println(i);//25, 强转有可能丢失精度
          */
        // 两点规则
        byte b1 = 5;
        byte b2 = 6;
        //byte b3 = b1+b2; //编译错误, b1和b2运算自动转int, 左右类型不一致
        //byte b3 = (byte)b1+b2;//编译错误, 强转优先级高, 先强转再计算
        byte b3 = (byte)(b1+b2);//正确, 先运算再强转

        System.out.println(2+2); //4
        System.out.println(2+'2'); //52, 字符2对应的码为50, 则2+50=52
        System.out.println('2'+'2'); //100, 字符2对应的码为50, 则50+50=100
        System.out.println('2');    //2, 因为没有运算, 所以直接输出字符2

        int m = 'a';
        System.out.println(m); // 97, 查看字符对应的码
        char n = 97;
        System.out.println(n); //a, 查看对应的字符
        /*
        * 练习:
        *   //两点规则
        *   byte b1 = 5;
        *   byte b2 = 6;
        *   byte b3 = b1+b2; //编译错误, b1和b2运算自动转int, 左右类型不一致
        *   byte b3 = (byte)b1+b2; //编译错误, 强转优先级高, 先强转再计算, 左右类型不一致
        *   byte b3 = (byte)(b1+b2); //正确, 先运算再强转
        *
        *   SyStem.out.println(2+2); //4
        *   System.out.println(2+'2'); //52, 字符2对应的码为50, 2+50=52
        *   System.out.println('2'+'2'); //100, 字符2对应的码为50, 50+50=100
        *   System.out.println('2'); //2, 因为没有运算, 所以输出字符2
        *
        *   int m = 'a';
        *   System.out.println(m); //97, 查看字符对应的码
        *   char n = 97;
        *   System.out.println(n); //a, 查看字符对应的码
        * */
    }
}
